iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
Cloud Native

上完 AWS 線上課程就打算應徵相關工作是否搞錯甚麼系列 第 25

Day 25 使用 AWS Lambda 寄送更直觀的 Amazon SNS 通知

  • 分享至 

  • xImage
  •  

昨天的文章寫到使用 EventBridge 和 SNS 實作 AWS 服務的及時通知

不過在串接 Amazon SNS 的時候都會發現一件事情

就是收到的內容不夠直觀

除此之外也會帶入很多 AWS 的原生訊息

如果我們想要客製化這些訊息

那就要在前方使用 AWS Lambda 才能夠將訊息轉化成更適合人閱讀的訊息

甚麼是 Amazon SNS

昨天很臨時的提到 Amazon SNS

那 Amazon SNS 是甚麼呢?

Amazon Simple Notification Service (Amazon SNS) 是一種受管服務

會提供從發佈者到訂閱者的訊息傳遞

Amazon SNS 提供兩種傳遞訊息的模式

一個是 Application to Application

也就是 Amazon SNS 收到訊息後接著串接到其他 AWS 的服務

另一個則是 Application to Person

就是我們以往常接觸到的 SNS 通知

可以直接發送訊息給終端使用者

SNS Delivery Protocols

如何使用 Lambda 函數將訊息發佈到 Amazon SNS 主題

想要知道如何使用 SNS 串接到 AWS Lambda 請參與這篇文章

本篇文章主要是講述如何從 Lambda 將訊息發佈到 Amazon SNS

創建一個 SNS 主題

創建一個 Lambda 函數

在 SNS 的訂閱主題的 Access Policy 加入以下的權限

{
      "Sid": "AllowFromLambda",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:sts::125919661051:assumed-role/{AWS Lambda Role Name}/{AWS Lambda Function Name}"
      },
      "Action": "sns:Publish",
      "Resource": "{SNS 主題的 ARN}"
    }

Lambda 程式調用 SNS

以官方提供的 Python 程式為例

是使用 boto3 這個第三方套件

先初始化一個 sns 的 client

然後再呼叫 publish 方法將資訊推送到 SNS

client.publish(TopicArn='topic arn',Message="Test message",Subject="Test Subject")

可以注意到的是官方只有兩個參數

如果是寄送 email 的話

參數使用 Subject 和 Message 則可以帶入標題和內容

import json
import boto3
client = boto3.client('sns')
def lambda_handler(event, context):
   response = client.publish(TopicArn='arn:aws:sns:<region>:<account-number>:<topic-name>',Message="Test message")
   print("Message published")
   return(response)

§ 注意 §
如果 SNS 想串接 Microsoft Teams
需要做一些調整,不可以直接使用 Webhook
一個是使用 Email 的方式寄送
https://dev.to/aws-builders/how-to-send-aws-notifications-aws-sns-to-microsoft-teams-1d1l

想要推送 Microsoft Teams 或 Slack 可能要直接使用 Lambda 推送
https://repost.aws/knowledge-center/sns-lambda-webhooks-chime-slack-teams
實作時,需要考量到 Security Group 有沒有開啟
以及 AWS Lambda 如果需要對外串接服務需要走 NAT Gateway 出外網

參考資料:

  1. 什麼是 Amazon SNS?
  2. 如何使用 Lambda 函數將訊息發佈到 Amazon SNS 主題?

上一篇
Day 24 使用 EventBridge 和 SNS 實作 AWS 服務的及時通知
下一篇
Day 26 CloudWatch 簡介
系列文
上完 AWS 線上課程就打算應徵相關工作是否搞錯甚麼30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言